isp-status is a purpose-built internet uplink monitoring appliance designed to answer one question clearly and honestly:
What is the real state of internet connectivity right now, and how has it behaved recently?
It is not a dashboard platform.
It is not a billing tool.
It is not a traffic analyzer.
It is an operational truth surface.
Core Principles
- Clarity over cleverness
- Signal over noise
- Data-plane truth over protocol theory
- Separation of concerns (routing, uplinks, BGP)
- No external dependencies
Architecture Overview
Lightweight Appliance Design
- Designed for VM environments (ESXi validated)
- Ubuntu minimal install tested
- SQLite authoritative backend
- No external cloud services
- No agent framework
- No telemetry pipelines
Recommended baseline:
- 2 vCPU
- 2 GB RAM
- 240 GB storage (more if long retention required)
Uplink Monitoring Model
Each uplink is treated as a dedicated, forced-interface test path.
Forced Interface Probing
All probes are bound to the specific NIC:
- ICMP via
ping -I - HTTPS via
curl --interface
This prevents route ambiguity and ensures true per-uplink measurement.
3-State Historical Model
Each minute is classified as:
| State | Meaning |
|---|---|
| UP | Internet reachable and healthy |
| DEGRADED | Internet reachable but impaired |
| DOWN | Internet unusable |
The system records the worst state observed within each minute to prevent false optimism.
NAT-Aware Gateway Logic
Not all uplinks behave the same.
- ISP-facing links require gateway reachability.
- NAT/LAN uplinks may ignore gateway ICMP if outbound traffic works.
This prevents false “DOWN” classifications in real-world NAT environments.
Live View
60-Minute Operational Graph
- 1 data point per minute
- Per-uplink view
- Data-plane usability only
- BGP intentionally excluded
The graph answers:
“Was this link usable for outbound internet traffic at this minute?”
It emphasizes patterns over snapshots.
Historical Analysis
Long-range history is rolled up into 5-minute buckets.
Supported ranges:
- 24 hours
- 72 hours
- 7 days
- 30 days
- 90 days
Includes:
- Per-state minute counts
- Percentage summaries
- Daily breakdowns
- CSV export capability
- Deterministic padded graph rendering
Internet Validation Model
Each uplink performs dual outbound testing:
ICMP Targets
- 1.1.1.1
- 8.8.8.8
HTTPS Targets
- 1.1.1.1
- Dedicated anti-cache endpoint
Either protocol succeeding indicates partial usability.
This avoids:
- ICMP-only false negatives
- HTTPS-only false positives
Canary Integrity Endpoint
A nocache.php endpoint is used as a validation probe.
It exists to answer:
“Is this request reaching the real internet right now, without caching, rewriting, or interception?”
It is not used in uptime rollups.
It is a diagnostic integrity probe, not a stability metric.
Health & Integrity Monitoring
isp-status monitors itself.
The internal health system validates:
- System uptime
- Load averages
- RAM usage
- Disk utilization
- SQLite database status
- File permissions
- History freshness
- Missing data detection
- Largest historical gap detection
If the monitoring system degrades, it is visible.
App-Down Protection
If the Flask application becomes unreachable:
- Synthetic “System Unresponsive” points are injected into history.
- Graphs do not silently gap.
- Monitoring integrity is preserved.
Evidence & Forensics
Designed for operational environments.
Downloadable Bundles (direct LAN only)
- Systemd unit definitions
- Service status
- Journal logs
- Troubleshooting log
- Application source snapshot
- Static files and templates
- Optional SQLite database
This allows:
- Rapid escalation
- Offline review
- Evidence preservation
- Reproducibility
Health Update Bundles (direct LAN only)
Operator actions on /health are only available from the direct LAN admin URL:
http://172.16.198.26:8080/health.
When preparing a ZIP for /health update import:
- Include file members only.
- Use forward-slash paths under
app/, for exampleapp/templates/health.htmlandapp/static/css/app.css. - Do not include directory entries such as
app/static/orapp/templates/; the importer rejects them as non-allowed app paths. - Be careful with PowerShell
Compress-Archivewhen zipping a directory, because it can include directory members. Verify the archive withtar -tf bundle.zipbefore upload.
Control Plane Separation (BGP)
BGP is displayed separately from uplink usability.
Why?
- BGP can be UP while traffic is broken.
- Traffic can briefly function while BGP is DOWN.
- Mixing them creates false conclusions.
isp-status separates control-plane visibility from data-plane truth.
Reverse Proxy Friendly
Designed to sit behind:
- Caddy
- NGINX
- HAProxy
Supports:
- LAN-only internal endpoints
- Auth-protected public views
- IP-restricted downloads
What isp-status Is NOT
- Not a traffic analyzer
- Not an SLA billing engine
- Not a packet capture tool
- Not a performance benchmarking suite
- Not an automation framework
It is a decision-support tool.
Operational Benefits
- Removes the need to plug a laptop into ISP links
- Provides objective evidence during disputes
- Makes flapping immediately visible
- Encourages pattern-based reasoning
- Reduces dashboard clutter
- Improves incident confidence
Designed to Be Trusted
isp-status intentionally avoids feature creep.
If it becomes noisy or confusing:
- Remove complexity
- Reduce indicators
- Preserve clarity
We don’t ship code. We ship clarity.